草庐IT

c++ - ofstream 指针的 vector

全部标签

c++ - 在 C++ 中自初始化为 nullptr 的普通原始指针

我喜欢C++11中的新指针类型,但有时我仍然需要原始指针。然而,让我对C++中的“原始”类型越来越难过的是,它们习惯于在未给出显式值时初始化为未定义。随着我更频繁地使用std::shared_ptr等,将原始指针初始化为null的需要感觉越来越脆弱和不必要。我在说:classfoo{...std::shared_ptrpb;//Initiallynullinwhateverconstructor.std::unique_ptrpd;//Likewise.std::weak_ptrpg;//Andagain.lar*pr;//Uh-oh!Whoknowswhatthisis?Better

c++ - 为什么我在 C++ 中得到 "error: expected ' }'"但在 C 中却没有?

当我在以下C++源代码中编译时,我得到了"error:expected'}'"'^'指向的地方:typedefenum{false,true}Boolean;^当我将其编译为C源代码时,我没有收到此错误。这是什么原因?我很难过! 最佳答案 false和true是C++关键字,因此您不能将它们用作enum标识符。在C中,它们不是关键字,因此您的代码可以工作,但如果您包含那么它将无法编译,因为该header定义了false和true作为宏。请注意,您可能不应该自己实现boolean类型。C++已经有了bool类型,如果您使用的是C99编

c++ - 双瓶颈,如何改善?

我需要提高以下代码的性能(IntelIvyBridge,x64):unsignedintdelta;unsignedinta[100];unsignedintb[100];...doublesum=0;for(inti=0;i=sum;真正的瓶颈是double并使执行时间增加3倍。a[index]将是0到500m之间的任何值。b[index]将从0到500。问:在这段代码的两次调用之间,数组a和b是如何修改的?在每次调用中,唯一的区别是a[index]++;其中0b总是相同。delta也没有改变。由于结果与另一个数字进行比较并存储为bool值,因此我绝对需要尽可能高的精度。这就是为什么

c++ - 为什么局部变量不设置为零?

既然全局变量和静态变量默认初始化为0,为什么局部变量也默认不初始化为0? 最佳答案 因为这样的零初始化需要执行时间。这会使您的程序显着变慢。每次调用函数时,程序都必须执行无意义的开销代码,这些代码会将变量设置为零。静态变量在程序的整个生命周期内持续存在,因此您可以负担得起对它们进行零初始化的奢侈,因为它们只被初始化一次。而局部变量是在运行时初始化的。在实时系统中,启用编译器选项以停止静态存储对象的零初始化的情况并不少见。这样的选项使程序不标准,但也使其启动更快。 关于c++-为什么局部变

c++ - 将变量传递给函数的成本

我不确定函数调用是如何翻译的,我担心传递的变量在不需要时会被复制到局部变量中。我可以通过使用全局变量来避免不必要的复制,但这不是一个好的解决方案...1)当变量在目标函数中没有改变时,将它们作为指针、引用或常量传递会更好吗?voidfkt1(inti,intj){do_something();printf("%d",i+j);}intmain(){inti=5;intj=6;fkt1(i,j);}2)将不在函数中使用的变量传递给函数是否很昂贵。例如,保持一个通用接口(interface),例如:templatevoidfkt2(Ta,Tb,intlen=-1){do_something

c++ - 为什么编译器允许你在这里 "write"一个 const 变量?

为什么你可以这样欺骗编译器:constinta=5;*((int*)&a)=5;//VC/armccdoesnotcomplain当上面是这样的“删节”时:constint*ptr2const=&a;int*ptr=ptr2const;//asexpectederrorisraisedhere*ptr=5; 最佳答案 转换是您告诉编译器“我知道我在做什么”的方式,因此它不会提示。不幸的是,在这种情况下,您将调用未定义的行为。 关于c++-为什么编译器允许你在这里"write"一个cons

c++ - 函数调用顺序

以下表达式中函数调用的顺序是什么:a=f1(23,14)*f2(12/4)+f3();是否依赖于编译器? 最佳答案 在C和C++中,每个操作数的计算顺序未指定,这意味着,在您的情况下,根据标准未指定函数调用的顺序。请注意,它未指定,不是实现定义。 关于c++-函数调用顺序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9818099/

C++ 指向 vector 的指针

我必须将元素插入到指向vector的指针中。我已经编写了以下代码,但它给出了段错误。有人可以指出此代码中的错误是什么,或者我们如何替代地执行此操作。intmain(){vector*te;te->push_back(10);coutsize() 最佳答案 你永远不会分配vector:vector*te=newvector;此外,您不需要动态分配。更简洁的方法是使用自动存储:intmain(){vectorte;te.push_back(10);cout 关于C++指向vector的指针,

c++ - std::vector<A> error C2582: 'operator =' 函数在

我使用简单的vectorpush_back到类型A的对象并收到此错误,这是我的代码:classA{public:A(inta,intb,intc);};#include"A.h"................std::vector*vec_objects=newstd::vector();while(....somecondition...){Aa(1,2,3)vec_objects->push_back(a);}出现这个错误:c:\programfiles\microsoftvisualstudio9.0\vc\include\xutility(3159):errorC2582:'

c++ - 为什么删除指向指针 vector 的指针会导致指针无效?

编辑:感谢您的回答!我用std::string返回类型声明了tellSomething方法,而它应该是void!我把自己绊倒了,责怪可怜的无辜的delete运算符(operator):)!让我们考虑一个指向动态分配的vector的指针,它包含指向动态分配的对象的指针://Createthevectorofpointersstd::vector*v=newstd::vector;//CreatetwoobjectsA*a1=newA;A*a2=newA;//Populatethevectorv->push_back(a1);v->push_back(a2);//Deletethevect